/*
* 用九宫格打一串数字，这串数字背后的拼音所代表的含义。
*
* */

//映射表
let keyMap = {
    1:1,
    2:"abc",
    3:"def",
    4:"ghi",
    5:"jkl",
    6:"mno",
    7:"pqrs",
    8:"tuv",
    9:"wxyz",
}

let num = "45683968" //加密字符串

function letterDecode(str){

    if(str){ //如果str存在

        //先定义一个结果数组来保存数据结果
        let res = []

        //就使用深度优先搜索方法
        function dfs(current,start){ //字符串 当前位下标 开始搜索位下标
            if(start >= str.length){
                res.push(current)
                return
            }
            let startStr = keyMap[str[start]] //从给的加密字符串中第一位下标开始
            for(let i = 0; i < startStr.length; i++){
                dfs(current + startStr[i],start + 1)
                //dfs("gjmtdwmt",0) 最后一位t是8的第0位
                //dfs("gjmtdwmu",1) 最后一位t是8的第1位
                //dfs("gjmtdwmv",2) 最后一位t是8的第2位
                //dfs("gjmtdwnt",3)
                //dfs("gjmtdwnu",4)
                //dfs("gjmtdwnv",5)
            }
        }
        dfs("",0) //最先开始传入空字符串，从第0位开始
        return res
    }
    return "" //如果不存在
}

letterDecode(num)

